// 1.0 引入模块
import axios from 'axios'
import qs from 'qs'
import local from '@/utils/local.js'
import { Message } from 'element-ui'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

// 1.1 设置超时和基本地址
axios.defaults.baseURL = 'http://39.106.222.189:5000'
axios.defaults.timeout = 10000

// 2.0 请求和响应的拦截
axios.interceptors.request.use(config => {
  NProgress.start()
  const token = local.get('token')
  if (token) {
    // 给当前的这次请求头添加一个字段赋值为token
    config.headers.Authorization = token
  }
  // 每一次的请求都会经过这里
  return config
})

axios.interceptors.response.use(res => {
  NProgress.done()
  // 响应拦截里面，根据响应的结果，直接在这里统一判断
  const { code, msg } = res.data
  if (msg) {
    if (code === 0 || code === '00') {
      Message.success(msg)
    } else {
      Message.error(msg)
    }
  }
  return res.data
})

// 3.0 导出请求的方法
// 统一传参格式, 统一处理成功和失败
export default {
  // 查询数据
  get(url, params) {
    return new Promise((resolve, reject) => {
      axios
        .get(url, { params })
        .then(res => {
          resolve(res)
        })
        .catch(err => {
          // 集中处理报错
          reject(err)
        })
    })
  },
  // 增加数据
  post(url, query) {
    return new Promise((resolve, reject) => {
      axios
        .post(url, qs.stringify(query))
        .then(res => {
          resolve(res)
        })
        .catch(err => {
          // 集中处理报错
          reject(err)
        })
    })
  },
  // 修改数据
  put() {},
  // 删除数据
  delete() {}
}
